package com.itheima.api.stream.demo02;

import java.util.*;
import java.util.stream.Stream;

/**
 * Stream流的生成方式：
 *
 * 1、Collection体系的集合可以直接使用stream()方法去生成流
 * 2、Map体系的集合间接的生成流(获取所有的键的集合，然后在生成流)
 * 3、数组可以通过Stream接口的静态方法of(T... values)生成流
 *
 */
public class StreamDemo01 {

    public static void main(String[] args) {

        // Collection体系的集合可以直接使用stream()方法去生成流
        Collection<String> col = new ArrayList<String>() ;
        col.add("hello") ;
        col.add("world") ;
        col.add("java") ;

        // filter方法就是对流中的元素进行过滤操作 ， Predicate是一个函数式接口，在该接口中存在一个方法 boolean test(T t);
        // 我们的流在使用这个接口方法的时候，会将每一个元素作为方法的参数进行传递，我们对这个元素处理完毕以后需要返回一个boolean类型值
        // 如果这个boolean类型的值是true，那么说明这个元素是满足指定条件的，进行元素的保留，如果返回的是false，就说明这个元素不满足
        // 条件，直接过滤掉
        col.stream().filter( (s) -> {
            return  s.length() > 4 ;
        }).forEach( s -> System.out.println(s) );

        System.out.println("------------------------------------------------");

        // Map体系的集合间接的生成流(获取所有的键的集合，然后在生成流)
        Map<String , String> hashMap = new HashMap<String , String>() ;
        hashMap.put("郭靖" , "黄蓉") ;
        hashMap.put("杨过" , "小龙女") ;
        hashMap.put("尔康" , "紫薇") ;

        // 获取所有的键的集合
        Set<String> keySet = hashMap.keySet();
        keySet.stream().filter( s -> s.startsWith("尔")).forEach( s -> {
            String value = hashMap.get(s);
            System.out.println(s + "----" + value);
        });

        System.out.println("------------------------------------------------");

        // 数组可以通过Stream接口的静态方法of(T... values)生成流
        // public static<T> Stream<T> of(T... values)
        Stream.of(23 , 45 , 76 , 89).forEach( s -> System.out.println(s) );

    }

}















